home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / system / mail / transpor / ifmail23.z / ifmail23 / ifmail / iflib / rfcdate.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-14  |  1.2 KB  |  59 lines

  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. char *wdays[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  5. char *months[]={"Jan","Feb","Mar","Apr","May","Jun",
  6.         "Jul","Aug","Sep","Oct","Nov","Dec"};
  7.  
  8. char *rfcdate(now)
  9. time_t now;
  10. {
  11.     static char buf[40];
  12.     struct tm ptm;
  13. #if defined(DONT_HAVE_TM_GMTOFF)
  14.     struct tm gtm;
  15. #endif
  16.     char sign;
  17.     int hr,min;
  18.     long offset;
  19.  
  20.     if (!now) time(&now);
  21.     ptm=*localtime(&now);
  22.  
  23. #if defined(DONT_HAVE_TM_GMTOFF)
  24.     /* To get the timezone, compare localtime with GMT. */
  25.     gtm=*gmtime(&now);
  26.  
  27.     /* Assume we are never more than 24 hours away. */
  28.     offset = gtm.tm_yday - ptm.tm_yday;
  29.     if (offset > 1)
  30.         offset = -24;
  31.     else if (offset < -1)
  32.         offset = 24;
  33.     else
  34.         offset *= 24;
  35.  
  36.     /* Scale in the hours and minutes; ignore seconds. */
  37.     offset += gtm.tm_hour - ptm.tm_hour;
  38.     offset *= 60;
  39.     offset += gtm.tm_min - ptm.tm_min;
  40. #else
  41.     offset=ptm.tm_gmtoff/60L;
  42. #endif
  43.  
  44.     if (offset <= 0)
  45.     {
  46.         sign='+';
  47.         offset=-offset;
  48.     }
  49.     else sign='-';
  50.     hr=offset/60L;
  51.     min=offset%60L;
  52.  
  53.     sprintf(buf,"%s, %02d %s %02d %02d:%02d:%02d %c%02d%02d",
  54.         wdays[ptm.tm_wday],ptm.tm_mday,months[ptm.tm_mon],
  55.         ptm.tm_year%100,ptm.tm_hour,ptm.tm_min,ptm.tm_sec,
  56.         sign,hr,min);
  57.     return(buf);
  58. }
  59.